package com.indusfo.spc.mapper;

import com.indusfo.spc.pojo.*;
import com.indusfo.spc.vo.XTreeNode;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.mybatis.spring.annotation.MapperScans;

import java.util.List;
import java.util.Map;

/**
 * @author louk
 * @date 2019/10/18 9:05
 */
public interface UploadMapper {


    /**
     * 对用户批量新增
     * @param userList
     * @return
     */
    int insertListUser(@Param("userList") List<User> userList);


    /**
     * 批量新增物料
     * @param materialXOList
     * @return
     */
    int updateListMat(@Param("materialXOList") List<Mat> materialXOList);


    /**
     * 批量新增车间
     * @param workShopList
     * @return
     */
    int updateListWorkShop(@Param("workShopList") List<Workshop> workShopList);


    /**
     * 批量新增产线
     * @param productLineList
     * @return
     */
    int updateListProductLine(@Param("productLineList") List<Productline> productLineList);


    /**
     * 批量新增工位
     * @param stationList
     * @return
     */
    int updateListStation(@Param("stationList") List<Station> stationList);
//    //批量新增工序
//    int updateListPro(@Param("proList") List<Pro> proList);


    /**
     * //批量新增采集项目
     * @param deteProList
     * @return
     */
    int updateListDete(@Param("deteProList") List<Dete> deteProList);


    /**
     * //批量新增设备
     * @param equipmentList
     * @return
     */
    int updateListDevice(@Param("equipmentList") List<Device> equipmentList);


    /**
     * //批量新增托盘
     * @param palletsList
     * @return
     */
    int updateListPallet(@Param("palletsList") List<Pallet> palletsList);


    /**
     * //批量新增班次
     * @param classesList
     * @return
     */
    int updateListClasses(@Param("classesList") List<Classe> classesList);


    /**
     * //批量新增条码规则
     * @param ruleListList
     * @return
     */
    int updateListRuleDetail(@Param("ruleListList") List<RuleDetail> ruleListList);

    /**
     * 批量新增不良原因
     * @param badcauseList
     * @return
     */
    int updateListBadcause(@Param("badcauseList") List<Badcause> badcauseList);

    /**
     * 批量新增不良对策
     * @param badreplyList
     * @return
     */
    int updateListBadreply(@Param("badreplyList") List<Badreply> badreplyList);

    /**
     * 批量新增工艺文件库
     * @param profileDetailList
     * @return
     */
    int updateListProfileDetail(@Param("profileDetailList") List<ProfileDetail> profileDetailList);

    /**
     * 查询部门
     * @return
     */
    @MapKey("depName")
    Map<String, Dep> queryDep();

    //查询数据字典当中的数据
    //物料类型101027
    //计量单位101003
    //物料来源  101033

    /**
     * 数据字典查询
     * @param lDictId
     * @return
     */
    @MapKey("itemName")
    Map<String, Datadict> queryType(@Param("dictId") Integer lDictId);

    /**
     * 查询所有的工位
     * @return
     */
    @MapKey("stationName")
    Map<String, Station> queryStation();

    /**
     * 查询所有的条码规则
     * @return
     */
    @MapKey("ruleName")
    Map<String, Rule> queryRule();

    /**
     * 查询所有的物料类别
     * @return
     */
    @MapKey("matTypeName")
    Map<String, MatType> queryMatType();

    /**
     * 查询所有的车间
     * @return
     */
    @MapKey("workshopName")
    Map<String,Workshop> queryWorkShop();

    /**
     * 查询所有的产线
     * @return
     */
    @MapKey("productlineName")
    Map<String,Productline> queryProductionLine();
    @MapKey("areaName")
    Map<String,Area> queryArea();
    /**
     *
     * @return
     */
    int getByvcDeteProj(@Param("vcDeteProj") String vcDeteProj);

    /**
     * 查询所有的产线
     * @return
     */
    @MapKey("productlineName")
    Map<String,Productline> queryProductLine();

    /**
     * 查询不良原因
     * @return
     */
    @MapKey("badcauseTypeName")
    Map<String,BadcauseType> queryDefectType();
    /**
     * 查询不良对策类别
     * @return
     */
    @MapKey("badreplyTypeName")
    Map<String,BadreplyType> queryBadCountermeasuresType();

    /**
     * 查询物料
     * @return
     */
    @MapKey("matCode")
    Map<String,Mat> queryMat();

    /**
     * 查询版本
     * @return
     */
    @MapKey("matVerName")
    Map<String,MatVer> queryMatVer();

    /**
     * 查询工序
     * @return
     */
    @MapKey("proName")
    Map<String,Pro> queryPro();

    /**
     * 查询仓库信息
     * @return
     */
    @MapKey("warehouseName")
    Map<String,Warehouse> queryWarehouse();

    @MapKey("siteName")
    Map<String,Site> querySite();
    /**
     * 新增Profile
     */
    Integer insertProfile(ProfileDetail profileDetail);

    /**
     * 根据产品编码查询版本名称
     */
    @MapKey("matVerName")
    Map<String,MatVer> queryMatVerByMatId(@Param("matId") Integer matId);
    @MapKey("proName")
    Map<String,MatFlow> queryMatFlowByMatVerId(@Param("matVerId")Integer matVerId);

    /**
     * 查询设备类型
     * @return
     */
    @MapKey("deviceTypeName")
    Map<String,DeviceType> queryDeviceType();

    @MapKey("matCode")
    Map<String,Mat> queryProduct();

    /**
     * 检测数据库是否存储该产品的信息
     * @param matId
     * @return
     */
    List<Profile> checkHasProfile(@Param("matId") Integer matId);

    /**
     * 更新
     * @param profileDetail
     * @return
     */
    int updateProfile(ProfileDetail profileDetail);

    /**
     * 批量新增仓库
     * @param warehouseList
     */
    int updateListWarehouse(@Param("warehouseList") List<Warehouse> warehouseList);

    /**
     * 批量新增区域
     * @param areaList
     * @return
     */
    int updateListArea(@Param("areaList") List<Area> areaList);

    /**
     * 批量新增库位
     * @param siteList
     * @return
     */
    int updateListSite(@Param("siteList") List<Site> siteList);

    /**
     * 批量新增物料-库位
     * @param siteMatList
     * @return
     */
    int updateListSiteMat(@Param("siteMatList") List<SiteMat> siteMatList);
    /**
     * 查询不良现象
     */
    @MapKey("badphenoName")
    Map<String,Badpheno> queryBadPheno();

    /**
     * 批量新增叫料信息
     * @param dosingList
     * @return
     */
    int updateListDosing(@Param("dosingList") List<Dosing> dosingList);

    /**
     * 查询批次编码是否重复
     * @param batch
     * @return
     */
    int queryDistinctBatchCode(Batch batch);

    /**
     * 批量新增批次编码
     * @param batchList
     * @return
     */
    int updateListBatch(@Param("batchList") List<Batch> batchList);

    /**
     * 查询产品流程下新增的物料
     * @return
     */
    @MapKey("matCode")
    Map<String,Mat> queryMatToProduct();

    /**
     * 查询标准流程信息
     * @return
     */
    @MapKey("matVerName")
    Map<String,MatVer> queryUploadMatVer();

    /**
     * 批量新增产品-版本
     * @param uploadMatVerList
     * @return
     */
    int insertMatVerList(@Param("uploadMatVerList") List<UploadMatVer> uploadMatVerList);

    /**
     * 批量新增版本下的工序流程
     * @param insertMatFlowList
     * @return
     */
    int insertMatFlowList(@Param("insertMatFlowList") List<MatFlow> insertMatFlowList);
    /**
     * 批量新增版本下的维修流程
     * @param insertMatRepairList
     * @return
     */
    int insertMatRepairList(@Param("insertMatRepairList") List<MatRepair> insertMatRepairList);

    /**
     * 批量新增版本下的维修流程的工序
     * @param insertMatRepairFlowList
     * @return
     */
    int insertMatRepairFlowList(@Param("insertMatRepairFlowList")List<MatRepairFlow> insertMatRepairFlowList);

    /**
     * 批量新增版本下的维修流程的维修采集项目
     * @param insertMatRepairDeteList
     * @return
     */
    int insertMatRepairDeteList(@Param("insertMatRepairDeteList") List<MatRepairDete> insertMatRepairDeteList);

    /**
     * 批量新增版本下的工序流程下的工位
     * @param insertMatStationList
     * @return
     */
    int insertMatStationList(@Param("insertMatStationList") List<MatStation> insertMatStationList);

    /**
     * 批量新增版本下的工序流程下的采集项目
     * @param insertMatDeteList
     * @return
     */
    int insertMatDeteList(@Param("insertMatDeteList") List<MatDete> insertMatDeteList);
    /**
     * 批量新增版本下的工序流程下的关键物料
     * @param insertMatBomList
     * @return
     */
    int insertMatBomList(@Param("insertMatBomList") List<MatBom> insertMatBomList);

    int insertMatBadphenoList(@Param("insertMatBadphenoList") List<MatBadpheno> insertMatBadphenoList);
    /**
     * 查询版本下的工序流程
     * @param matVerIdList
     * @return
     */
    List<MatFlow> queryMatFlowList(@Param("matVerIdList") List<Integer> matVerIdList);

    /**
     * 查询版本下的工序流程下的工位信息
     * @param oldMatFlowId
     * @return
     */
    List<MatStation> queryMatStationList(@Param("oldMatFlowId") List<Integer> oldMatFlowId);

    /**
     * 查询版本下的工序流程下的关键物料
     * @param oldMatFlowId
     * @return
     */
    List<MatBom> queryMatBomList(@Param("oldMatFlowId") List<Integer> oldMatFlowId);

    /**
     * 查询版本下工序流程下的采集项目
     * @param oldMatFlowId
     * @return
     */
    List<MatDete> queryMatDeteList(@Param("oldMatFlowId") List<Integer> oldMatFlowId);
    /**
     * 查询版本下工序流程下的不良现象
     * @param oldMatFlowId
     * @return
     */
    List<MatBadpheno> queryMatBadphenoList(@Param("oldMatFlowId") List<Integer> oldMatFlowId);

    /**
     * 查询版本下维修流程下的工序
     * @param oldMatRepirId
     * @return
     */
    List<MatRepairFlow> queryMatRepairFlowList(@Param("oldMatRepirId") List<Integer> oldMatRepirId);

    /**
     * 查询版本下维修流程下的维修采集项目下的工序名称
     * @param oldRepairId
     * @return
     */
    List<RepairDetail> queryListRepairDetailList(@Param("oldRepairId") List<Integer> oldRepairId);

    /**
     * 查询版本下维修流程下维修采集项目工序名称的明细
     * @param matRepairList
     * @return
     */
    List<MatRepairDete> queryMatRepairDeteList(@Param("matRepairList") List<MatRepair> matRepairList);
    /**
     * 查询版本下的工序流程集合
     * @param matVerIdList
     * @return
     */
    @MapKey("matVerId")
    Map<String,MatFlow> queryMatFlowMap(@Param("matVerIdList") List<Integer> matVerIdList);

    /**
     * 查询版本下的维修流程
     * @param matVerIdList
     * @return
     */
    List<MatRepair> queryMatRepairList(@Param("matVerIdList") List<Integer> matVerIdList);

    /**
     *  查询版本下的维修流程map
     * @param matVerIdList
     * @return
     */
    @MapKey("matVerId")
    Map<String,MatRepair> queryMatRepairMap(@Param("matVerIdList") List<Integer> matVerIdList);

    int checkMatVer(MatVer matVer);

    /**
     * 获取车间XTreeNode
     * @return
     */
    List<Tree> queryWorkShopXTreeNode();
    /**
     * 获取产线XTreeNode
     * @return
     */
    List<Tree> queryProductlineXTreeNode();
    /**
     * 获取工位XTreeNode
     * @return
     */
    List<Tree> queryStationXTreeNode();
}
